package com.wang.mall.service;

import com.wang.mall.bean.OmsOrder;
import com.wang.mall.bean.Product;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wang.mall.to.rabbitmq.StockLockedTo;
import com.wang.mall.util.PageUtils;
import com.wang.mall.vo.LockStockResult;
import com.wang.mall.vo.WareProductLockVo;

import java.util.List;
import java.util.Map;

public interface ProductService extends IService<Product>{


    PageUtils queryPage(Integer page, Integer limit, String productName);

    boolean saveProduct(Product product);

    Product getInfo(Long id);

    boolean updateProduct(Product product);

    boolean delete(List<Long> ids);

    /**
     * 判断商品是否有库存
     * @param productIds
     * @return
     */
    List<Map<String, Object>> getProductsHasStock(List<Long> productIds);

    /**
     * 为订单锁定库存
     * @param lockVo
     * @return
     */
    List<LockStockResult> orderLock(WareProductLockVo lockVo);


    /**
     * 解锁库存
     * @param stockLockedTo
     * @return
     */
    void releaseLockStock(StockLockedTo stockLockedTo);

    /**
     * 订单关闭, 解锁订单的库存
     * @param omsOrder
     */
    void releaseLockStock(OmsOrder omsOrder);
}
